From 45257e31c721d1ffbd2cdcfb25ae637d7e1e7b29 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Javier=20Jard=C3=B3n?= Date: Mon, 12 Apr 2010 17:48:09 +0200 Subject: [PATCH] Don't use GTK_WIDGET_*SET_FLAGS (wid, GTK_TOPLEVEL) Introduce internal _gtk_widget_set_is_toplvel() for this Fixes https://bugzilla.gnome.org/show_bug.cgi?id=614510 --- gtk/gtkinvisible.c | 2 +- gtk/gtkwidget.c | 10 ++++++++++ gtk/gtkwidget.h | 3 +++ gtk/gtkwin32embedwidget.c | 2 +- gtk/gtkwindow.c | 14 +++++++++----- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/gtk/gtkinvisible.c b/gtk/gtkinvisible.c index c24487cb53..8c0b3beb5e 100644 --- a/gtk/gtkinvisible.c +++ b/gtk/gtkinvisible.c @@ -95,7 +95,7 @@ gtk_invisible_init (GtkInvisible *invisible) GdkColormap *colormap; gtk_widget_set_has_window (GTK_WIDGET (invisible), TRUE); - GTK_WIDGET_SET_FLAGS (invisible, GTK_TOPLEVEL); + _gtk_widget_set_is_toplevel (GTK_WIDGET (invisible), TRUE); g_object_ref_sink (invisible); diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 61c6b1c945..772619f8c5 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -5953,6 +5953,16 @@ gtk_widget_is_toplevel (GtkWidget *widget) return (GTK_OBJECT_FLAGS (widget) & GTK_TOPLEVEL) != 0; } +void +_gtk_widget_set_is_toplevel (GtkWidget *widget, + gboolean is_toplevel) +{ + if (is_toplevel) + GTK_OBJECT_FLAGS (widget) |= GTK_TOPLEVEL; + else + GTK_OBJECT_FLAGS (widget) &= ~(GTK_TOPLEVEL); +} + /** * gtk_widget_is_drawable: * @widget: a #GtkWidget diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h index dd8eb316d8..17bb2b6f21 100644 --- a/gtk/gtkwidget.h +++ b/gtk/gtkwidget.h @@ -1298,6 +1298,9 @@ void gtk_requisition_free (GtkRequisition *requisition); void _gtk_widget_set_has_grab (GtkWidget *widget, gboolean has_grab); +void _gtk_widget_set_is_toplevel (GtkWidget *widget, + gboolean is_toplevel); + void _gtk_widget_grab_notify (GtkWidget *widget, gboolean was_grabbed); diff --git a/gtk/gtkwin32embedwidget.c b/gtk/gtkwin32embedwidget.c index 2e1a6b1b64..9c276ea3b4 100644 --- a/gtk/gtkwin32embedwidget.c +++ b/gtk/gtkwin32embedwidget.c @@ -85,7 +85,7 @@ gtk_win32_embed_widget_init (GtkWin32EmbedWidget *embed_widget) window->type = GTK_WINDOW_TOPLEVEL; - GTK_WIDGET_SET_FLAGS (embed_widget, GTK_TOPLEVEL); + _gtk_widget_set_is_toplevel (GTK_WIDGET (embed_widget), TRUE); gtk_container_set_resize_mode (GTK_CONTAINER (embed_widget), GTK_RESIZE_QUEUE); } diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 51ff50056d..108a7c14e2 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -901,7 +901,7 @@ gtk_window_init (GtkWindow *window) GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (window); gtk_widget_set_has_window (GTK_WIDGET (window), TRUE); - GTK_WIDGET_SET_FLAGS (window, GTK_TOPLEVEL); + _gtk_widget_set_is_toplevel (GTK_WIDGET (window), TRUE); GTK_PRIVATE_SET_FLAG (window, GTK_ANCHORED); @@ -8379,22 +8379,26 @@ void _gtk_window_set_is_toplevel (GtkWindow *window, gboolean is_toplevel) { - if (gtk_widget_is_toplevel (GTK_WIDGET (window))) + GtkWidget *widget; + + widget = GTK_WIDGET (window); + + if (gtk_widget_is_toplevel (widget)) g_assert (g_slist_find (toplevel_list, window) != NULL); else g_assert (g_slist_find (toplevel_list, window) == NULL); - if (is_toplevel == gtk_widget_is_toplevel (GTK_WIDGET (window))) + if (is_toplevel == gtk_widget_is_toplevel (widget)) return; if (is_toplevel) { - GTK_WIDGET_SET_FLAGS (window, GTK_TOPLEVEL); + _gtk_widget_set_is_toplevel (widget, TRUE); toplevel_list = g_slist_prepend (toplevel_list, window); } else { - GTK_WIDGET_UNSET_FLAGS (window, GTK_TOPLEVEL); + _gtk_widget_set_is_toplevel (widget, FALSE); toplevel_list = g_slist_remove (toplevel_list, window); } } -- 2.30.2